#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

template <class T>
void mySort(vector<T>& a) {
    sort(a.begin(), a.end());
}


template <class T>
class Set {
private:
    vector<T> value;

public:
    void add(T v) {
        if (!isExist(v)) {
            value.push_back(v);
        }
    }

    bool isExist(T v) {
        return find(value.begin(), value.end(), v) != value.end();
    }

    Set<T> operator+(const Set<T>& r) {
        Set<T> result;
        result.value = value; // 复制当前集合的元素
        for (const auto& elem : r.value) {
            result.add(elem); // 添加不重复的元素
        }
        return result;
    }

    void display() {
        cout << "{ ";
        for (const auto& elem : value) {
            cout << elem << " ";
        }
        cout << "}" << endl;
    }

    int getSize() const {
        return value.size();
    }

    void sortSet() {
        sort(value.begin(), value.end());
    }
};

int main() {
    cout << "测试 mySort 函数模板:" << endl;
    vector<int> arr = {5, 2, 9, 1, 5, 6};
    mySort(arr);
    cout << "排序后的数组: ";
    for (const auto& elem : arr) {
        cout << elem << " ";
    }
    cout << endl;

    cout << "\n测试 Set 类模板:" << endl;
    Set<int> set1;
    set1.add(5);
    set1.add(2);
    set1.add(9);
    set1.add(5); // 重复元素不会添加
    set1.display();

    Set<int> set2;
    set2.add(1);
    set2.add(5);
    set2.add(8);
    set2.display();

    // 求并集
    Set<int> set3 = set1 + set2;
    cout << "并集: ";
    set3.display();

    // 排序集合
    cout << "排序后的并集: ";
    set3.sortSet();
    set3.display();

    return 0;
}
